package com.hr.尚学堂.线性表;

import java.util.Arrays;

/**
 * 使奇数位于偶数前面
 * 输入一个整型数组，实现一个方法来调整该数组中的元素的顺序，
 * 使得所有奇数位于数组的前半部分，所有偶数位于数组的后半部分。
 * @date 2020/10/03
 **/
public class 使奇数位于偶数前面 {

    /**
     * 使奇数位于偶数前面
     * @param array 需要调整奇偶数位置的数组
     */
    public static void reOrderArray(int[] array) {
        // 1.处理arr为null的情况
        if (array == null) {
            throw new NullPointerException("空指针异常，array：" + array);
        }
        // 2.定义两个下标，min的初始值为0，max的初始值为arr.length - 1
        int min = 0;
        int max = array.length - 1;
        // 3.定义一个循环，用于调整数组中奇偶数的位置
        while (min < max) {// 如果min小于max，则一直调整数组中元素的位置
            // 4.让min从前往后找，如果arr[min]的值为偶数，则停止查找
            while (min < max && array[min] % 2 != 0) {
                min++;
            }
            // 5.让max从后往前找，如果arr[max]的值为奇数，则停止查找
            while (min < max && array[max] % 2 == 0) {
                max--;
            }
            // 6.如果min的值不等于max，则交换arr[min]和arr[max]的值
            if (min != max) {
                int temp = array[min];
                array[min] = array[max];
                array[max] = temp;
            }
        }
    }

    /**
     *新开一个数组空间
     * @param nums
     * @return
     */
    public int[] exchange(int[] nums) {
        if (nums==null||nums.length==0){
            return nums;
        }
        int left=0;
        int right=nums.length-1;
        int[] res=new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            if ((nums[i]&1)==0){//偶数
                res[right--]=nums[i];
            }else{
                res[left++]=nums[i];
            }
        }
        return res;
    }

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        使奇数位于偶数前面.reOrderArray(array);
        System.out.println(Arrays.toString(array));
    }
}
